package com.wangbo.box.observer;

import java.util.ArrayList;
import java.util.List;

/**
 * 观察者模式
 *
 * 指多个对象间存在一对多的依赖关系，当一个对象的状态发生改变时，所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式，它是对象行为型模式。
 */
public class ObserverPattern {

    static abstract class Subject{
        List<Observer> observerList = new ArrayList<>();

       abstract void notifyObserverList();

        public void add(Observer observer)
        {
            observerList.add(observer);
        }
        public void remove(Observer observer)
        {
            observerList.remove(observer);
        }

    }

    static class RealSubject extends Subject{

        @Override
        void notifyObserverList() {
            super.observerList.forEach(Observer::response);
        }
    }

    interface Observer{
        void response();
    }

    static class ObserverA implements Observer{

        @Override
        public void response() {
            System.out.println(" ob A response");
        }
    }

    static class ObserverB implements Observer{

        @Override
        public void response() {
            System.out.println(" ob B response");
        }
    }

    public static void main(String[] args) {

        Subject subject = new RealSubject();
        subject.add(new ObserverA());
        subject.add(new ObserverB());
        subject.notifyObserverList();
    }
}
